package araujoCoronelVillamayor.plantasVsZombies.domain;

import araujoCoronelVillamayor.plantasVsZombies.domain.Criatura;
import araujoCoronelVillamayor.plantasVsZombies.domain.Mejora;
import com.google.common.base.Objects;
import java.util.ArrayList;
import org.eclipse.xtext.xbase.lib.Functions.Function2;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
import org.uqbar.commons.utils.Observable;

@Observable
@SuppressWarnings("all")
public class Planta extends Criatura {
  private static ArrayList<Mejora> mejoras;
  
  private String _tipo;
  
  public String getTipo() {
    return this._tipo;
  }
  
  public void setTipo(final String tipo) {
    this._tipo = tipo;
  }
  
  public Planta(final String nombreParametro, final int ataqueParametro, final int defensaParametro, final String tipoPlantaParametro) {
    super(nombreParametro, ataqueParametro, defensaParametro);
    ArrayList<Mejora> _arrayList = new ArrayList<Mejora>();
    Planta.mejoras = _arrayList;
    this.setTipo(tipoPlantaParametro);
  }
  
  public int poderAtaque() {
    int _ataque = this.getAtaque();
    final Function2<Integer,Mejora,Integer> _function = new Function2<Integer,Mejora,Integer>() {
      public Integer apply(final Integer acum, final Mejora mejora) {
        int _mejoraOfensiva = mejora.getMejoraOfensiva();
        int _plus = ((acum).intValue() + _mejoraOfensiva);
        return Integer.valueOf(_plus);
      }
    };
    Integer _fold = IterableExtensions.<Mejora, Integer>fold(Planta.mejoras, Integer.valueOf(0), _function);
    int _plus = (_ataque + (_fold).intValue());
    return _plus;
  }
  
  public int poderDefensa() {
    int _defensa = this.getDefensa();
    final Function2<Integer,Mejora,Integer> _function = new Function2<Integer,Mejora,Integer>() {
      public Integer apply(final Integer acum, final Mejora mejora) {
        int _mejoraDefensiva = mejora.getMejoraDefensiva();
        int _plus = ((acum).intValue() + _mejoraDefensiva);
        return Integer.valueOf(_plus);
      }
    };
    Integer _fold = IterableExtensions.<Mejora, Integer>fold(Planta.mejoras, Integer.valueOf(0), _function);
    int _plus = (_defensa + (_fold).intValue());
    return _plus;
  }
  
  public boolean agregarMejora(final Mejora mejora) {
    boolean _add = Planta.mejoras.add(mejora);
    return _add;
  }
  
  public boolean sosPlantaTerrestre() {
    String _tipo = this.getTipo();
    boolean _equals = Objects.equal(_tipo, "Terrestre");
    return _equals;
  }
  
  public boolean sosPlantaAcuatica() {
    String _tipo = this.getTipo();
    boolean _equals = Objects.equal(_tipo, "Acuatica");
    return _equals;
  }
}
